#include <unistd.h> 
#include <stdio.h>
#include <string.h>

int main()
{
    //C库函数
    printf("printf\n");
    fprintf(stdout,"%s","fprintf\n");
    const char* message = "fwrite\n";
    fwrite(message,1,strlen(message),stdout);

    //系统调用
    write(1,"write\n",6);

    fork();
    //当这个源文件编译形成的可执行程序往文件中重定向输入的时候，由于fork了，父进程和子进程都各自有一个用户级缓冲区，C库函数写入就往用户级缓冲区中写入，由于是往文件中写入，写入规则
    //就为缓冲区满之后再刷新，于是父进程和子进程结束后用户级缓冲区的数据都刷新到文件中，于是调用C库函数的输出文件中就有两份，而调用系统接口的直接写入到文件内核缓冲区，父子进程共有
    //一个，不会刷新两次,（说明：父进程和子进程不共享同一个用户空间缓冲区，因为进程之间具有独立性，但共享同一个文件内核缓冲区，因为父子进程共享同一个文件描述符） 
    return 0;
}
